EC2 インスタンスの Docker から SQL*Plus を使用して RDS for Oracle へ接続してみた
こんにちは。
諸事情につき、久しぶりの投稿となります。はい。健康には気をつけましょう。
記事作成の背景
検証において RDS for Oracle に作成したインスタンスへサクッと接続したい場面があったとします。
従来の方法を愚直にやる場合、Oracle Client を OTN(Oracle Technology Network) からダウンロードして、インストール先の環境へ持っていって、インストールして、環境変数を設定して… としなければいけません。手順が多く、慣れていないと環境を汚してしまったり、エラーが発生してインストールが中断するなど、正直準備が面倒です。
調べてみたところ、Oracle 社が公開している Dockerfile がありましたので、こちらを使用して どっかーん してみました。という訳で、今風に Docker を使って、RDS for Oracle へ接続した備忘録を残しておきます。
重要現在、は、AWS CloudShellコンピューティング環境はDockerコンテナをサポートしていません。
検証環境
- EC2: Amazon Linux 2
- RDS: Oracle Database 19c (マルチテナント)
- Oracle Client: 19.3.0
手順
1. Git と Docker のインストールとサービスの有効化
$ sudo yum install -y git docker $ sudo systemctl start docker $ sudo usermod -a -G docker ec2-user $ sudo systemctl enable docker
2. Docker Image を取得し、イメージを作成
$ mkdir -p docker/sqlplus $ cd docker/sqlplus/ $ git clone https://github.com/oracle/docker-images.git $ cd docker-images/OracleInstantClient/oraclelinux7/19/ $ sudo docker build -t oracle/instantclient:19.3.0 .
3. 取得した Docker Image を run して、sqlplus を実行
$ sudo docker run -ti --rm oracle/instantclient:19.3.0 sqlplus '<ユーザー名>/<パスワード>@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=<DBのFQDN>)(Port=1521))(CONNECT_DATA=(SID=<DB名>)))'
以下、実行結果です。
[ec2-user@ip-172-31-39-173 ~]$ sudo docker run -ti --rm oracle/instantclient:19.3.0 sqlplus 'admin/**********#@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=multi-19c.***.ap-northeast-1.rds.amazonaws.com)(Port=1521))(CONNECT_DATA=(SID=multi)))' SQL*Plus: Release 19.0.0.0.0 - Production on Wed Jul 7 08:39:46 2021 Version 19.11.0.0.0 Copyright (c) 1982, 2020, Oracle. All rights reserved. Last Successful login time: Wed Jul 07 2021 04:31:28 +00:00 Connected to: Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production Version 19.11.0.0.0 SQL> select status from v$instance; STATUS ------------ OPEN
SQL> alter session set container=CDB$ROOT; ERROR: ORA-01031: insufficient privileges